home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
fortran
/
f2c_src.zip
/
F2C
/
FIXES
< prev
next >
Wrap
Text File
|
1991-06-10
|
46KB
|
1,128 lines
31 Aug. 1989:
1. A(min(i,j)) now is translated correctly (where A is an array).
2. 7 and 8 character variable names are allowed (but elicit a
complaint under -ext).
3. LOGICAL*1 is treated as LOGICAL, with just one error message
per LOGICAL*1 statement (rather than one per variable declared
in that statement). [Note that LOGICAL*1 is not in Fortran 77.]
Like f77, f2c now allows the format in a read or write statement
to be an integer array.
5 Sept. 1989:
Fixed botch in argument passing of substrings of equivalenced
variables.
15 Sept. 1989:
Warn about incorrect code generated when a character-valued
function is not declared external and is passed as a parameter
(in violation of the Fortran 77 standard) before it is invoked.
Example:
subroutine foo(a,b)
character*10 a,b
call goo(a,b)
b = a(3)
end
18 Sept. 1989:
Complain about overlapping initializations.
20 Sept. 1989:
Warn about names declared EXTERNAL but never referenced;
include such names as externs in the generated C (even
though most C compilers will discard them).
24 Sept. 1989:
New option -w8 to suppress complaint when COMMON or EQUIVALENCE
forces word alignment of a double.
Under -A (for ANSI C), ensure that floating constants (terminated
by 'f') contain either a decimal point or an exponent field.
Repair bugs sometimes encountered with CHAR and ICHAR intrinsic
functions.
Restore f77's optimizations for copying and comparing character
strings of length 1.
Always assume floating-point valued routines in libF77 return
doubles, even under -R.
Repair occasional omission of arguments in routines having multiple
entry points.
Repair bugs in computing offsets of character strings involved
in EQUIVALENCE.
Don't omit structure qualification when COMMON variables are used
as FORMATs or internal files.
2 Oct. 1989:
Warn about variables that appear only in data stmts; don't emit them.
Fix bugs in character DATA for noncharacter variables
involved in EQUIVALENCE.
Treat noncharacter variables initialized (at least partly) with
character data as though they were equivalenced -- put out a struct
and #define the variables. This eliminates the hideous and nonportable
numeric values that were used to initialize such variables.
Treat IMPLICIT NONE as IMPLICIT UNDEFINED(A-Z) .
Quit when given invalid options.
8 Oct. 1989:
Modified naming scheme for generated intermediate variables;
more are recycled, fewer distinct ones used.
New option -W nn specifies nn characters/word for Hollerith
data initializing non-character variables.
Bug fix: x(i:min(i+10,j)) used to elicit "Can't handle opcode 31 yet".
Integer expressions of the form (i+const1) - (i+const2), where
i is a scalar integer variable, are now simplified to (const1-const2);
this leads to simpler translation of some substring expressions.
Initialize uninitialized portions of character string arrays to 0
rather than to blanks.
9 Oct. 1989:
New option -c to insert comments showing original Fortran source.
New option -g to insert line numbers of original Fortran source.
10 Oct. 1989:
! recognized as in-line comment delimiter (a la Fortran 88).
24 Oct. 1989:
New options to ease coping with systems that want the structs
that result from COMMON blocks to be defined just once:
-E causes uninitialized COMMON blocks to be declared Extern;
if Extern is undefined, f2c.h #defines it to be extern.
-ec causes a separate .c file to be emitted for each
uninitialized COMMON block: COMMON /ABC/ yields abc_com.c;
thus one can compile *_com.c into a library to ensure
precisely one definition.
-e1c is similar to -ec, except that everything goes into
one file, along with comments that give a sed script for
splitting the file into the pieces that -ec would give.
This is for use with netlib's "execute f2c" service (for which
-ec is coerced into -e1c, and the sed script will put everything
but the COMMON definitions into f2c_out.c ).
28 Oct. 1989:
Convert "i = i op ..." into "i op= ...;" even when i is a
dummy argument.
13 Nov. 1989:
Name integer constants (passed as arguments) c__... rather
than c_... so
common /c/stuff
call foo(1)
...
is translated correctly.
19 Nov. 1989:
Floating-point constants are now kept as strings unless they
are involved in constant expressions that get simplified. The
floating-point constants kept as strings can have arbitrarily
many significant figures and a very large exponent field (as
large as long int allows on the machine on which f2c runs).
Thus, for example, the body of
subroutine zot(x)
double precision x(6), pi
parameter (pi=3.1415926535897932384626433832795028841972)
x(1) = pi
x(2) = pi+1
x(3) = 9287349823749272.7429874923740978492734D-298374
x(4) = .89
x(5) = 4.0005
x(6) = 10D7
end
now gets translated into
x[1] = 3.1415926535897932384626433832795028841972;
x[2] = 4.1415926535897931;
x[3] = 9.2873498237492727429874923740978492734e-298359;
x[4] = (float).89;
x[5] = (float)4.0005;
x[6] = 1e8;
rather than the former
x[1] = 3.1415926535897931;
x[2] = 4.1415926535897931;
x[3] = 0.;
x[4] = (float)0.89000000000000003;
x[5] = (float)4.0004999999999997;
x[6] = 100000000.;
Recognition of f77 machine-constant intrinsics deleted, i.e.,
epbase, epprec, epemin, epemax, eptiny, ephuge, epmrsp.
22 Nov. 1989:
Workarounds for glitches on some Sun systems...
libf77: libF77/makefile modified to point out possible need
to compile libF77/main.c with -Donexit=on_exit .
libi77: libI77/wref.c (and libI77/README) modified so non-ANSI
systems can compile with USE_STRLEN defined, which will cause
sprintf(b = buf, "%#.*f", d, x);
n = strlen(b) + d1;
rather than
n = sprintf(b = buf, "%#.*f", d, x) + d1;
to be compiled.
26 Nov. 1989:
Longer names are now accepted (up to 50 characters); names may
contain underscores (in which case they will have two underscores
appended, to avoid clashes with library names).
28 Nov. 1989:
libi77 updated:
1. Allow 3 (or, on Crays, 4) digit exponents under format Ew.d .
2. Try to get things right on machines where ints have 16 bits.
29 Nov. 1989:
Supplied missing semicolon in parameterless subroutines that
have multiple entry points (all of them parameterless).
30 Nov. 1989:
libf77 and libi77 revised to use types from f2c.h.
f2c now types floating-point valued C library routines as "double"
rather than "doublereal" (for use with nonstandard C compilers for
which "double" is IEEE double extended).
1 Dec. 1989:
f2c.h updated to eliminate #defines rendered unnecessary (and,
indeed, dangerous) by change of 26 Nov. to long names possibly
containing underscores.
libi77 further revised: yesterday's change omitted two tweaks to fmt.h
(tweaks which only matter if float and real or double and doublereal are
different types).
2 Dec. 1989:
Better error message (than "bad tag") for NAMELIST, which no longer
inhibits C output.
4 Dec. 1989:
Allow capital letters in hex constants (f77 extension; e.g.,
x'a012BCd', X'A012BCD' and x'a012bcd' are all treated as the integer
167848909).
libi77 further revised: lio.c lio.h lread.c wref.c wrtfmt.c tweaked
again to allow float and real or double and doublereal to be different.
6 Dec. 1989:
Revised f2c.h -- required for the following...
Simpler looking translations for abs, min, max, using #defines in
revised f2c.h .
libi77: more corrections to types; additions for NAMELIST.
Corrected casts in some I/O calls.
Translation of NAMELIST; libi77 must still be revised. Currently
libi77 gives you a run-time error message if you attempt NAMELIST I/O.
7 Dec. 1989:
Fixed bug that prevented local integer variables that appear in DATA
stmts from being ASSIGNed statement labels.
Fillers (for DATA statements initializing EQUIVALENCEd variables and
variables in COMMON) typed integer rather than doublereal (for slightly
more portability, e.g. to Cray